﻿/************************************************************************

   Extended Silverlight Toolkit

   Copyright (C) 2010-2012 Xceed Software Inc.

   This program is provided to you under the terms of the Microsoft Public
   License (Ms-PL) as published at http://extendedsilverlight.codeplex.com/license

   Please purchase a commercial version of this toolkit if you are using
   it in a commercial product. The commercial versions support the project,
   and also include more features for each control, priority support,
   source code, updates, removed watermark, and a proprietary license.

   Visit http://xceed.com and follow @datagrid on Twitter.

  **********************************************************************/

using System;
using System.Collections;
using System.Collections.Generic;

namespace Xceed.Silverlight.Data
{
  internal abstract class SyncEnumerator<T> : DataEnumeratorBase, ISyncEnumerator<T>
  {
    protected sealed override IEnumerable<DataSourceChangedEventArgs> TransformDataSourceChangedEventArgs( 
      DataSourceContext context, 
      DataSourceChangedEventArgs e )
    {
      throw new NotSupportedException();
    }

    #region ISyncEnumerator Members

    public abstract CountResult Count( CountParameters parameters );

    public abstract GroupCountResult GroupCount( CountParameters parameters );

    public abstract StatResults GetStatValues( StatParameters parameters );

    public virtual bool JumpMoveAndFetch(
      JumpMoveAndFetchParameters parameters, 
      out Nullable<long> actualMoveCount, 
      out ICollection fetchedItems, 
      out SourcePosition endPosition,
      out RelativeOffset endPositionOffset,
      out EstimateInt64 totalCount )
    {
      ICollection<T> genCollection;

      bool ret = this.JumpMoveAndFetch(
                   parameters,
                   out actualMoveCount,
                   out genCollection,
                   out endPosition,
                   out endPositionOffset,
                   out totalCount );

      fetchedItems = DataUtils.ConvertToNonGeneric<T>( genCollection );

      return ret;
    }

    #endregion ISyncEnumerator Members

    #region ISyncDataEnumerator<T> Members

    public abstract bool JumpMoveAndFetch(
      JumpMoveAndFetchParameters parameters,
      out Nullable<long> actualMoveCount,
      out ICollection<T> fetchedItems,
      out SourcePosition endPosition,
      out RelativeOffset endPositionOffset,
      out EstimateInt64 totalCount );

    #endregion ISyncDataEnumerator<T> Members
  }
}
